Bussines case¶

Papara¶

Giriş¶

"Örnek Data" sayfasında Papara nın test verileri yer almaktadır. . Dosyanın adı paparaornekdata.xlsxdir.

In [2]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb
 
import warnings
warnings.filterwarnings('ignore')

Verilerde Kullanıcı bazında ölçülebilecek KPI'lar aşağıdaki gibi olabilir:¶

Toplam İşlem Sayısı: Her kullanıcının yaptığı işlemlerin toplam sayısı ölçülebilir. Bu, kullanıcının aktifliği hakkında bilgi verir.

İşlem Başına Ortalama Tutarsızlık: Her kullanıcının işlem başına ortalama tutarsızlığı ölçülebilir. Bu, kullanıcının para işlemlerinde ne kadar hata yaptığını veya ne kadar dikkatli olduğunu gösterir.

İptal Oranı: Kullanıcının yaptığı işlemlerin iptal oranı ölçülebilir. Bu, kullanıcının işlemlerini ne kadar dikkatli yaptığını gösterir. Ortalama İşlem Tutarı: Kullanıcının yaptığı işlemlerin ortalama tutarı ölçülebilir. Bu, kullanıcının ne kadar büyük işlemler yaptığını veya ne kadar aktif olduğunu gösterir.

İşlem Tipine Göre Dağılım: Kullanıcının yaptığı işlemlerin türüne göre dağılımı ölçülebilir. Bu, kullanıcının hangi tür işlemleri yaptığına bağlı olarak hangi para birimleri veya işlem tipleri hakkında bilgi verir.

Bu KPI'ları belirlemek için Python üzerinden bir data frame oluşturarak görselleme ile ilgili bir çıktı sağlamamız işe yarayacaktır. Bu çalışmam bu kütüphaneleri içeriyor. İleride bir predictive çalışması yapılması önemli bir fayda sağlamamızda işe yarayacaktır.

Bu laboratuvar için aşağıdaki kütüphaneleri kullanacağız:

pandasPandas - Bu kütüphane, veri çerçevesini 2D dizi biçiminde yüklemeye yardımcı olur ve analiz görevlerini tek seferde gerçekleştirmek için birden fazla işleve sahiptir.

Numpy - Numpy dizileri çok hızlıdır ve büyük hesaplamaları çok kısa sürede gerçekleştirebilir.

Matplotlib/Seaborn - Bu kütüphane görselleştirmeler çizmek için kullanılır.

Reading and understanding our data¶

In [3]:
### BEGIN SOLUTION
data = pd.read_excel("/Users/mertdil/Documents/Papara_Case/paparaornekdata.xlsx")

datamızda bulunan tabloları anlamlandırmak için data frame olarak açıyoruz

In [4]:
data.head()
Out[4]:
Islem_Id Kullanici_Id Iptal_Durum Islem_Tutari İslem_Ucreti Para_Birimi_Id Islem_Tipi Islem_Tarihi Para_Transfer_Tip Papara_Kart_Id Ulke_Kodu Kullanici_Tipi Kullanici_Dogum_Tarihi
0 133105 004dd4de-84e0-4491-b164-bb496fd7120d 0 19.0 0.0 0 6 2019-07-01 13:57:05.007 NaN NaN NaN 0.0 9999-12-31 23:59:59
1 133106 004dd4de-84e0-4491-b164-bb496fd7120d 0 24.0 0.0 0 6 2019-07-01 14:02:15.000 NaN NaN NaN 0.0 9999-12-31 23:59:59
2 133441 004dd4de-84e0-4491-b164-bb496fd7120d 0 297.0 0.0 0 6 2019-07-18 15:17:41.067 NaN NaN NaN 0.0 9999-12-31 23:59:59
3 133456 004dd4de-84e0-4491-b164-bb496fd7120d 0 742.5 0.0 0 6 2019-07-19 13:55:01.000 NaN NaN NaN 0.0 9999-12-31 23:59:59
4 133457 004dd4de-84e0-4491-b164-bb496fd7120d 0 495.0 0.0 0 6 2019-07-19 13:59:00.000 NaN NaN NaN 0.0 9999-12-31 23:59:59
In [5]:
data.shape
Out[5]:
(11371, 13)

Buradan, 11371 veri satırı olduğunu ve her satır için 13 farklı özelliğe veya sütuna sahip olduğumuzu öğrendik.

In [6]:
df=data
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 11371 entries, 0 to 11370
Data columns (total 13 columns):
 #   Column                  Non-Null Count  Dtype         
---  ------                  --------------  -----         
 0   Islem_Id                11371 non-null  int64         
 1   Kullanici_Id            11371 non-null  object        
 2   Iptal_Durum             11371 non-null  int64         
 3   Islem_Tutari            11371 non-null  float64       
 4   İslem_Ucreti            11371 non-null  float64       
 5   Para_Birimi_Id          11371 non-null  int64         
 6   Islem_Tipi              11371 non-null  int64         
 7   Islem_Tarihi            11371 non-null  datetime64[ns]
 8   Para_Transfer_Tip       5054 non-null   float64       
 9   Papara_Kart_Id          2492 non-null   float64       
 10  Ulke_Kodu               1291 non-null   object        
 11  Kullanici_Tipi          11370 non-null  float64       
 12  Kullanici_Dogum_Tarihi  11370 non-null  object        
dtypes: datetime64[ns](1), float64(5), int64(4), object(3)
memory usage: 1.1+ MB

Yukarıdaki çıktıya göre, 11371 girdimiz veya satırımız ve 12 özelliğimiz var. "Boş Olmayan Sayısı" sütunu boş olmayan girişlerin sayısını gösterir. Sayı 11371 ise, söz konusu özellik için eksik değer yoktur. 'Islem_Tutarı' hedefimiz ya da yanıt değişkenimizdir ve özelliklerin geri kalanı tahmin değişkenlerimizdir.

'describe()` fonksiyonu tüm sayısal değerler hakkında istatistiksel bilgi sağlayacaktır.

In [7]:
data.describe()
Out[7]:
Islem_Id Iptal_Durum Islem_Tutari İslem_Ucreti Para_Birimi_Id Islem_Tipi Para_Transfer_Tip Papara_Kart_Id Kullanici_Tipi
count 11371.000000 11371.000000 11371.000000 11371.000000 11371.000000 11371.000000 5054.000000 2492.000000 11370.000000
mean 150540.538211 0.061296 -10.368609 -0.327102 0.026031 7.363468 0.501187 1217.662520 1.389974
std 20211.537379 0.239884 6065.567386 5.543387 0.226692 3.668555 0.500048 2115.087932 0.786063
min 106047.000000 0.000000 -197975.570000 -340.000000 0.000000 0.000000 0.000000 181.000000 0.000000
25% 133241.500000 0.000000 -9.000000 0.000000 0.000000 7.000000 0.000000 241.000000 1.000000
50% 156065.000000 0.000000 -1.000000 0.000000 0.000000 7.000000 1.000000 1193.000000 2.000000
75% 169557.500000 0.000000 8.900000 0.000000 0.000000 9.000000 1.000000 1484.000000 2.000000
max 172797.000000 1.000000 200000.000000 19.520000 3.000000 17.000000 1.000000 12797.000000 2.000000
In [8]:
# Veri setindeki örneklerin sayısı
print("Veri setindeki  örneklerin sayısı:",df.shape[0])

# Veri setindeki benzersiz kullanıcı sayısı
print("Veri setindeki benzersiz kullanıcı sayısı:",df['Kullanici_Id'].nunique())

# Veri setindeki iptal edilen işlemlerin yüzdesi
print("Veri setindeki iptal edilen işlemlerin yüzdesi:",df['Iptal_Durum'].mean())
Veri setindeki  örneklerin sayısı: 11371
Veri setindeki benzersiz kullanıcı sayısı: 227
Veri setindeki iptal edilen işlemlerin yüzdesi: 0.061296280010553164
In [9]:
#Verinin temel özelliklerini inceleyin: Veride kaç adet satır ve sütun var? Hangi sütunlar veri tipi açısından sorunlu görünüyor?
print(df.shape)
print(df.dtypes)
(11371, 13)
Islem_Id                           int64
Kullanici_Id                      object
Iptal_Durum                        int64
Islem_Tutari                     float64
İslem_Ucreti                     float64
Para_Birimi_Id                     int64
Islem_Tipi                         int64
Islem_Tarihi              datetime64[ns]
Para_Transfer_Tip                float64
Papara_Kart_Id                   float64
Ulke_Kodu                         object
Kullanici_Tipi                   float64
Kullanici_Dogum_Tarihi            object
dtype: object

Burda verilerin bulunduğu çeşitleri görüyoruz

In [10]:
data.isnull().sum()
Out[10]:
Islem_Id                      0
Kullanici_Id                  0
Iptal_Durum                   0
Islem_Tutari                  0
İslem_Ucreti                  0
Para_Birimi_Id                0
Islem_Tipi                    0
Islem_Tarihi                  0
Para_Transfer_Tip          6317
Papara_Kart_Id             8879
Ulke_Kodu                 10080
Kullanici_Tipi                1
Kullanici_Dogum_Tarihi        1
dtype: int64

Burda verimizde bulunan nan değerlerin sayısını elde ediyoruz

In [11]:
data = data.fillna(method='ffill')

Bu işlemde verilerin doldurma işlemini gerçekleştiriyoruz

In [12]:
data.isnull().sum()
Out[12]:
Islem_Id                   0
Kullanici_Id               0
Iptal_Durum                0
Islem_Tutari               0
İslem_Ucreti               0
Para_Birimi_Id             0
Islem_Tipi                 0
Islem_Tarihi               0
Para_Transfer_Tip         10
Papara_Kart_Id            30
Ulke_Kodu                 30
Kullanici_Tipi             0
Kullanici_Dogum_Tarihi     0
dtype: int64
In [13]:
print("Para_Transfer_Tip unique değişken isimleri:",data['Para_Transfer_Tip'].unique())
print("Papara_Kart_Id unique değişken isimleri:",data['Papara_Kart_Id'].unique())
print("Ulke_Kodu unique değişken isimleri:",data['Ulke_Kodu'].unique())
Para_Transfer_Tip unique değişken isimleri: [nan  0.  1.]
Papara_Kart_Id unique değişken isimleri: [   nan  1514.   241. 11698. 11694. 11685. 12783. 11699. 12784. 12781.
 12719. 12785.  1195.  1188.  1272.  1573. 11622.  1591.   668.   673.
   660.   398.   582.   583.   186.  1484.   579.  1577.  1578.  1579.
  1580.  1581.  1582.   391.  1554.   600.  1476.   504. 12718.  1334.
   387.  1193. 12795. 12796. 12797.  1491. 11607.  1110.  1111.  1606.
  1607.  1608.  1616.  1629.   594.   382.   332.  1222.  1483.   674.
   215.  1120.  1119.  1479.   663.  1489.  1255.  1499. 11606.   679.
 11604.   688. 12738. 12737.  1243.  1477.  1548.   490.   491.   578.
  1268.  1315.   690.  1194.  1261.  1376.  1152.   512.   503.  1487.
  1572.  1437.  1518.   564.   509.  1630.  1626.  1627.  1496. 12763.
 12764.  1281.  1282. 11712.  1154.  1155.  1490.  1231.   670.  1241.
  1230.   664.   666. 12793.  1492.   560.   567.  1515.  1486.  1546.
  1520.   181.]
Ulke_Kodu unique değişken isimleri: [nan 'TR' 'le' 'US' 'GB' 945 89 45 'T' 'MO' 'LUX' 'V' 'tle' 'UL' 'GR']

bu işlemde tekrar doldurma işleminden sonra verilerin unique bilgilerini görüyoruz

In [14]:
# Müşteri iptal oranı
iptal_oranlari = df["Iptal_Durum"].value_counts(normalize=True)
print("Iptal oranlari:", iptal_oranlari)
Iptal oranlari: 0    0.938704
1    0.061296
Name: Iptal_Durum, dtype: float64
In [15]:
# İptal oranını zamanla değişimini göster
df["Islem_Tarihi"] = pd.to_datetime(df["Islem_Tarihi"])
df["Ay"] = df["Islem_Tarihi"].dt.month
df.groupby("Ay")["Iptal_Durum"].mean().plot()
plt.xlabel('İşlem Ayları')
plt.ylabel('İşlem Sayısı Ortalama Değer')
plt.title("İptal oranını zamanla değişimini göster")
plt.show()

İptal oranları yaz aylarında düşüp sonbahar aylarında yükselişe geçmiştir buna yönelik bir yönlendirme kampanyalar bilgilendirmeler sonbahar aylarında yapılıp promosyanlarla bu kullanıcıların churn durumu engellenebilir.

In [35]:
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
fig = px.histogram(df, x="Islem_Ayi", nbins=50)
fig.show()

"1., 3. ve 11. ayda gerçekleşen işlem sayısı hayli yüksektir. çözüm önerileri: Verileri daha ayrıntılı bir şekilde analiz ederek, bu aylarda hangi işlemlerin daha sık gerçekleştiğini belirleyebilirsiniz.

Örneğin, 1. ayda çok sayıda yeni kullanıcının işlem yaptığı fark edilmiş olabilir. Bu bilgi, daha etkili pazarlama stratejileri geliştirmenize yardımcı olabilir.

Bu yüksek işlem sayısının kaynaklarını daha verimli kullanmak için işlem hacmini yönetmek adına planlama yapabilirsiniz. Örneğin, bu aylarda yoğunluk yaşanacağı öngörülerek, daha fazla personel tahsis edilebilir veya daha fazla stok tedarik edilebilir.

Bu verileri diğer yılların aynı ayları ile karşılaştırarak trendleri belirleyebilirsiniz. Bu, gelecekte benzer dönemler için öngörüler yapmanıza ve bu dönemlerde müşteri memnuniyetini en üst düzeye çıkaracak stratejileri oluşturmanıza yardımcı olabilir."

In [36]:
fig = px.histogram(df, x="Islem_Saati", nbins=50)
fig.show()

En yüksek işlem saaatleri öğleden sonra akşama yöneliktir bu işlem hacmine yönelik bir çalışma yapılmasında yarar vardır.

In [37]:
fig = px.histogram(df, x="Islem_Tipi",y="Islem_Tutari",nbins=50)
fig.show()
In [38]:
# Hangi ülkelerden işlem yapılıyor?
ulkeler = df["Ulke_Kodu"].unique()
print("İşlem yapılan ülkeler:", ulkeler)
İşlem yapılan ülkeler: [nan 'TR' 'le' 'US' 'GB' 945 89 45 'T' 'MO' 'LUX' 'V' 'tle' 'UL' 'GR']
In [39]:
# İşlem türlerinin dağılımı
islem_tipleri = df["Islem_Tipi"].unique()
print("Kullanılan işlem tipleri:", islem_tipleri)
Kullanılan işlem tipleri: [ 6  9  7 12  2 13 11 14 17  0  1  8 15  3]
In [40]:
# İşlem tutarları ve ücretleri arasındaki ilişkiyi göster
import seaborn as sns
import matplotlib.pyplot as plt

sns.scatterplot(x="Islem_Tutari", y="İslem_Ucreti", data=df)
plt.show()

Bu grafik, işlem ücreti ile işlem tutarı arasındaki ilişkiyi görselleştirir. Eğer işlem tutarı arttıkça, işlem ücretinin de arttığını görebiliriz.

Eksiye yönelim işlem tuarları verilerinin eksi olarak yönlendirmesi ile olmuştur.

In [17]:
# KPI'ları hesaplayın ve görselleştirin
# Örnek olarak, toplam işlem tutarını ve işlem sayısını hesaplayabilirsiniz
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
total_transaction_amount = data['Islem_Tutari'].sum()
transaction_count = data.shape[0]
print("Toplam işlem tutarı: ", total_transaction_amount)
print("İşlem sayısı: ", transaction_count)

# Verileri görselleştirin
# Örnek olarak, işlem tutarları için bir histogram çizdirebilirsiniz
sns.barplot(data['Islem_Tutari'])
plt.title('İşlem Tutarları')
plt.xlabel('Tutar')
plt.ylabel('İşlem Sayısı')
plt.show()
Toplam işlem tutarı:  -117901.45004836004
İşlem sayısı:  11371
In [18]:
#Hangi para birimleri kullanılmış ve bunların müşteri sayısı nedir
para_birimleri = data['Para_Birimi_Id'].unique()
para_birimleri_musteri_sayisi = []
for para_birimi in para_birimleri:
    musteri_sayisi = len(data[data['Para_Birimi_Id'] == para_birimi]['Kullanici_Id'].unique())
    para_birimleri_musteri_sayisi.append((para_birimi, musteri_sayisi))
para_birimleri_musteri_sayisi = sorted(para_birimleri_musteri_sayisi, key=lambda x: x[1], reverse=True)
x = [str(pb[0]) for pb in para_birimleri_musteri_sayisi]
y = [pb[1] for pb in para_birimleri_musteri_sayisi]
plt.bar(x, y)
plt.xticks(rotation=90)
plt.xlabel('Para Birimleri')
plt.ylabel('Müşteri Sayısı')
plt.title('Hangi para birimleri kullanılmış ve bunların müşteri sayısı nedir?')
plt.show()

En çok müşterimiz 0 para birimi id si ile yapılmış diğer birimlerin toplamından daha yüksek olduğu için bu para birimindeki işlemlere ve kampanayalara öncelik vermek işimize yarayacaktır.

In [19]:
#Hangi ülkelerdeki kullanıcılar daha fazla işlem yapmıştır?
transactions_by_country = data.groupby('Ulke_Kodu')['Islem_Id'].count()
transactions_by_country.plot(kind='bar')
plt.xlabel('Ulke_Kodu')
plt.ylabel('İşlem Sayısı ')
plt.title("Hangi ülkelerdeki kullanıcılar daha fazla işlem yapmıştır?")
plt.show()
print(data['Ulke_Kodu'].unique())
[nan 'TR' 'le' 'US' 'GB' 945 89 45 'T' 'MO' 'LUX' 'V' 'tle' 'UL' 'GR']

En çok işlemin yapıldığı ülkenin "TR" kodu olmasının yanı sıra "tle" kodlu ve "le" kodlu ülkedeki işlemleri göz ardı etmemek bu tarafta bir yönlendirme yapmak gerekiyor. Bu işlemlerin hangi konuda dağılım gösterdiği analizlenip o tarafta kampanya ve yönlendirmeler artılması mantıklı bir çözümdür

In [20]:
#Hangi ülkelerdeki kullanıcılar daha fazla işlem yapmıştır?
transactions_by_country = data.groupby('Kullanici_Tipi')['Islem_Id'].count()
transactions_by_country.plot(kind='bar')

plt.xlabel('Kullanıcı_Tipi')
plt.ylabel('İşlem Sayısı ')
plt.title("Hangi tipteki kullanıcılar daha fazla işlem yapmıştır?")

plt.show()

En fazla işlem yapan kullanıcalar "2.0" olmasının yanı sıra "0.0" ve "1.0" kullanıcıları da öneme sahiptir.

In [21]:
#Hangi tarihlerde işlemler iptal edilmiştir ve iptal oranı nedir?
cancelled_transactions = data.loc[data['Iptal_Durum'] == 1]
cancelled_transactions_by_date = cancelled_transactions.groupby('Islem_Tarihi')['Islem_Id'].count() / data.groupby('Islem_Tarihi')['Islem_Id'].count()
plt.title("Hangi tarihlerde işlemler iptal edilmiştir ve iptal oranı nedir?")
cancelled_transactions_by_date.plot(kind='line')
plt.show()

İptal oranlarında en düşük dönemi 2019_09 ayında gerçekleştirmiştir.Geriye yönelik bu işlemin nedeni çözümlenmesi geleceğe yönelik plan alınmasını önem kazanıcaktır.

In [22]:
#Hangi kullanıcılar daha fazla işlem yapmıştır ve bu işlemler hangi para birimlerinde gerçekleştirilmiştir?
top_users = data.groupby('Kullanici_Id')['Islem_Id'].count().nlargest(10)
transactions_by_user = data.loc[data['Kullanici_Id'].isin(top_users.index)].groupby(['Kullanici_Id', 'Para_Birimi_Id'])['Islem_Id'].count()
transactions_by_user.unstack().plot(kind='bar', stacked=True)
plt.title('Hangi kullanıcılar daha fazla işlem yapmıştır ve bu işlemler hangi para birimlerinde gerçekleştirilmiştir?')
plt.show()
In [23]:
#Hangi kullanıcılar daha fazla işlem yapmıştır ve bu işlemler hangi kullanıcı tiplerindedir
top_users = data.groupby('Kullanici_Id')['Islem_Id'].count().nlargest(10)
transactions_by_user = data.loc[data['Kullanici_Id'].isin(top_users.index)].groupby(['Kullanici_Id', 'Kullanici_Tipi'])['Islem_Id'].count()
transactions_by_user.unstack().plot(kind='bar', stacked=True)
plt.xlabel('Kullanıcı_ID')
plt.ylabel('İşlem Sayısı ')
plt.title("Hangi kullanıcılar daha fazla işlem yapmıştır ve bu işlemler hangi kullanıcı tiplerindedir")
plt.show()
In [24]:
#En yüksek tutarlı işlem yapan 10 kullanıcı
top_users = data.groupby('Kullanici_Id')['Islem_Tutari'].sum().nlargest(10)
top_users.plot(kind='bar')
plt.xlabel('Kullanıcı_ID')
plt.ylabel('İşlem Sayısı ')
plt.title("En yüksek tutarlı işlem yapan 10 kullanıcı")
plt.show()

Bu kullanıcılara yönelik şampiyon kullanıcısı ünvanı verilip çeşitli kampanyalar sağlanması yarar sağlayabilir.

In [25]:
#Hangi işlem tipleri en fazla ücret almıştır?
fees_by_transaction_type = data.groupby('Islem_Tipi')['İslem_Ucreti'].sum()
fees_by_transaction_type.plot(kind='bar')
plt.xlabel('İşlem_Tipi')
plt.ylabel('İşlem Sayısı ')
plt.title("Hangi işlem tipleri en fazla ücret almıştır?ı")
plt.show()
In [26]:
#İşlem ücretlerinin dağılımı nasıldır?#
data['İslem_Ucreti'].plot(kind='hist')
plt.xlabel('İşlem Ücretleri')
plt.ylabel(' İşlem Ücretleri Sıklığı ')
plt.title("Hİşlem ücretlerinin dağılımı nasıldır?#")
plt.show()
In [27]:
#Hangi tarihlerde en fazla işlem gerçekleşmiştir?
transactions_by_date = data.groupby('Islem_Tarihi')['Islem_Id'].count()
transactions_by_date.plot(kind='line')
plt.xlabel('İşlem Tarihleri')
plt.ylabel(' İşlem sayıları ')
plt.title("Hangi tarihlerde en fazla işlem gerçekleşmiştir?")
plt.show()
In [28]:
#İşlemler hangi saatlerde daha fazla gerçekleştirilmiştir?
df['Islem_Saati'] = df['Islem_Tarihi'].dt.hour
df['Islem_Saati'].plot(kind='hist', bins=24)
plt.xlabel('Saat')
plt.ylabel('İşlem Sayısı')
plt.title('Saatlere Göre İşlem Sayısı')
plt.show()
In [29]:
#İşlemler hangi saatlerde daha fazla gerçekleştirilmiştir?
df['Islem_Ayi'] = df['Islem_Tarihi'].dt.month
df['Islem_Ayi'].plot(kind='hist', bins=12)
plt.xlabel('Ay')
plt.ylabel('İşlem Sayısı')
plt.title('Aylara Göre İşlem Sayısı')
plt.show()
In [30]:
# mevsimleri hesapla
df["Mevsim"] = df["Islem_Tarihi"].dt.month.apply(lambda x: "Kış" if x in [12, 1, 2] else
                                                "İlkbahar" if x in [3, 4, 5] else
                                                "Yaz" if x in [6, 7, 8] else
                                                "Sonbahar")

# mevsimlere göre iptal oranlarını hesapla
iptal_oranlari = df.groupby("Mevsim")["Iptal_Durum"].mean()

# yoğunluk grafiği çizdir
iptal_oranlari.plot(kind="bar")
plt.xlabel("Mevsim")
plt.ylabel("İptal Oranı")
plt.title("Mevsimlere Göre İptal Oranları")
plt.show()
In [31]:
# İşlem tarihlerine göre iptal oranlarını hesaplayalım
iptal_oranlari_aylar = data.groupby(data['Islem_Tarihi'].dt.month)['Iptal_Durum'].mean()

# Yoğunluk grafiği oluşturalım
import matplotlib.pyplot as plt

plt.figure(figsize=(8,6))
plt.title('Iptal Oranları Aylara Göre')
plt.xlabel('Aylar')
plt.ylabel('Iptal Oranları')
plt.hist(iptal_oranlari_aylar.index, bins=12, weights=iptal_oranlari_aylar.values)
plt.xticks(range(1,13))
plt.show()

SQL işlemi için şöyle bir kodlama yazabiliriz:

In [41]:
--2-Islem Tarihi alanını yıl,ay ve gün şeklinde ayıracak SQL komutunu yazınız.	

SELECT  DATEPART(year, Islem_Tarihi) as 'Year', DATEPART(month, Islem_Tarihi) as 'Month', DATEPART(day, Islem_Tarihi) as 'Day',
FROM ornek_data;
  Input In [41]
    --2-Islem Tarihi alanını yıl,ay ve gün şeklinde ayıracak SQL komutunu yazınız.
              ^
SyntaxError: invalid syntax
In [46]:
df['Islem_Yili'] = df['Islem_Tarihi'].dt.year
print("5-Yıllara göre işlem bazlı büyüme oranını analiz ediniz.")
# Yıllara göre toplam işlem tutarlarını hesapla
tutarlar = df.groupby('Islem_Yili')['Islem_Tutari'].sum()

# Yıllara göre işlem bazlı büyüme oranlarını hesapla
büyüme_oranları = tutarlar.pct_change()

# İlk yılın büyüme oranını 0 olarak ayarla
büyüme_oranları.iloc[0] = 0

# Sonuçları yazdır
print(büyüme_oranları)
5-Yıllara göre işlem bazlı büyüme oranını analiz ediniz.
Islem_Yili
2019    0.000000
2020   -1.643368
Name: Islem_Tutari, dtype: float64

6- Departmanlardan gelen rapor taleplerini analiz etmek için nasıl bir yol izlersiniz? (Departmanlarla iletişim kurma çerçevesinde ve talep detaylandırmayı göz önünde bulundurarak cevaplayabilirsiniz.)

Öncelikle rapor talebi hangi departmandan geldiğini belirlemek ve talebin detaylarını öğrenmek için ilgili departmanla iletişim kurmak gerekir. Talep detaylarına göre, veritabanındaki ilgili tabloları analiz etmek ve raporlama ihtiyaçlarını karşılayacak verileri çekmek gerekebilir.

Analiz yapmak için, raporlama talebinin detaylarına bağlı olarak farklı verileri kontrol etmek gerekebilir. Örneğin, finans departmanından gelen bir talep için, Islem_Tipi ve Islem_Tarihi gibi finansal veriler incelenerek bir rapor oluşturulabilir. Bu veriler, işlem tutarları, ücretleri, para birimi bilgileri gibi finansal ayrıntıları içerir.

Bir diğer örnek, pazarlama departmanından gelen bir talep için, kullanıcı tipi, kullanıcı doğum tarihi, ulke kodu gibi veriler incelenerek bir rapor oluşturulabilir. Bu veriler, hedef kitle belirleme, kampanya planlaması gibi pazarlama faaliyetleri için önemli olabilir.

Veri analizi yaparken, verilerin doğruluğundan emin olmak için doğrulama adımları atılmalıdır. Verilerin eksiksiz olduğundan ve gereksiz verilerin raporu etkilemeyeceğinden emin olunmalıdır. Ayrıca, raporlama talebinin kapsamını ve amacını anlamak için departmanla açık iletişim kurulması önemlidir.